package com.lzh.persevere.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lzh.persevere.model.entity.Comment;
import com.lzh.persevere.model.vo.comment.CommentVO;
import com.lzh.persevere.model.vo.comment.ModuleCommentCountVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 评论表数据库访问层
 *
 * @author luzhiheng
 * @since 2025-07-07
 */
public interface CommentMapper extends BaseMapper<Comment> {

    /**
     * 获取总数
     *
     * @param queryMap 查询参数
     * @return 列表
     */
    Integer countList(Map<String, Object> queryMap);

    /**
     * 获取分页列表
     *
     * @param queryMap 查询参数
     * @return 列表
     */
    List<Map<String, Object>> getPageList(Map<String, Object> queryMap);

    /**
     * 获取最新一条的子评论
     *
     * @param rootCommentIdList 根评论id列表
     * @return 列表
     */
    List<CommentVO> selectLatestSubComment(@Param("rootCommentIdList") List<Long> rootCommentIdList);

    /**
     * 获取更多子评论
     *
     * @param moduleId      模块id
     * @param rootCommentId 根评论id
     * @param commentIdList 子评论id列表
     * @return 列表
     */
    List<CommentVO> selectMoreSubComment(String moduleId, Long rootCommentId, List<Long> commentIdList);

    /**
     * 更新子评论数
     *
     * @param id       评论id
     * @param addCount 添加的子评论数
     */
    void updateSubCommentCount(Long id, int addCount);

    /**
     * 添加点赞数
     *
     * @param commentId 评论ID
     * @param likeCount 添加的点赞数
     */
    void addLikeCount(Long commentId, int likeCount);

    /**
     * 批量获取模块的评论总数
     *
     * @param moduleIdList 模块ID列表
     * @return 列表
     */
    List<ModuleCommentCountVO> selectTotalCountByModuleIdList(List<String> moduleIdList);
}

